create table paciente(
	id_paciente int primary key not null identity(1,1),
	primer_nombre nvarchar(20) not null,
	segundo_nombre nvarchar(20),
	primer_apellido nvarchar(20) not null,
	segundo_apellido nvarchar(20),
	telefono nvarchar(7),
	ocupacion nvarchar(20),
	email nvarchar(30)                                                               
)

create table cita(
	id_cita int identity(1,1),
	id_paciente int foreign key references paciente(id_paciente),
	tratamiento nvarchar(50) not null,
	fecha datetime not null,	
	constraint Primaria_compuesta  primary key( id_cita, id_paciente)  
)

create table Usuarios (
	username nvarchar(20) primary key not null,
	password nvarchar(50) not null,
	primer_nombre nvarchar(20) not null,
	segundo_nombre nvarchar(20),
	primer_apellido nvarchar(20) not null,
	segundo_apellido nvarchar(20),
	email nvarchar(50),
	fecha_registro datetime default getdate(),
	fecha_session datetime default getdate(),
)

create procedure crear_usuario(@username nvarchar(20), @password nvarchar(20),
	@primer_nombre nvarchar(20), @segundo_nombre nvarchar(20) = null,
	@primer_apellido nvarchar(20), @segundo_apellido nvarchar(20) = null,
	@email nvarchar(50)= null, @usertype varchar(20))
as
	insert into Usuarios(username, password, primer_nombre, segundo_nombre,
	primer_apellido, segundo_apellido, email,fecha_registro, usertype)
	values(@username, @password, @primer_nombre,
	@segundo_nombre, @primer_apellido, @segundo_apellido, @email, getdate(),
	@usertype)

--usuario: root password: admin

insert into Usuarios(username, password, primer_nombre, segundo_nombre,
	primer_apellido, segundo_apellido, email,fecha_registro, usertype)
	values('root', 'admin', 'root',
	null, 'root', null, null, getdate(),
	'admin')

create procedure modificar_usuario(@username nvarchar(20), @password nvarchar(20),
	@primer_nombre nvarchar(20), @segundo_nombre nvarchar(20) = null,
	@primer_apellido nvarchar(20), @segundo_apellido nvarchar(20) = null,
	@email nvarchar(50)= null, @usertype varchar(20))
as
	update usuarios set username = 	@username, password = @password, primer_nombre = @primer_nombre,
	segundo_nombre = @segundo_nombre, primer_apellido = @primer_apellido, segundo_apellido = @segundo_apellido,
	email = @email, @usertype = @usertype 
	where username = @username

select * from usuarios
create procedure loguearse(@username nvarchar(20), @password nvarchar(20))
as
	select username, password, fecha_registro, fecha_session, usertype, primer_nombre, primer_apellido,
	segundo_nombre, segundo_apellido, email
	from usuarios
	where username = @username and password = @password

create procedure logout(@username nvarchar(20))
as
	update usuarios set fecha_session = getdate() where username = @username

create procedure crear_paciente(@primer_nombre nvarchar(20), @segundo_nombre nvarchar(20) = null,
	@primer_apellido nvarchar(20), @segundo_apellido nvarchar(20) = null, @telefono nvarchar(8) = null,
    @ocupacion nvarchar(20) = null,	@email nvarchar(30) = null)
as
	insert into paciente(primer_nombre, segundo_nombre, primer_apellido, segundo_apellido,
	telefono, ocupacion, email) values(@primer_nombre, @segundo_nombre, @primer_apellido, @segundo_apellido,
	@telefono, @ocupacion, @email)

create procedure eliminar_paciente(@id int)
as
	delete from paciente where id_paciente = @id


create procedure modificar_paciente(@primer_nombre nvarchar(20), @segundo_nombre nvarchar(20) = null,
	@primer_apellido nvarchar(20), @segundo_apellido nvarchar(20) = null, @telefono nvarchar(8) = null,
    @ocupacion nvarchar(20) = null,	@email nvarchar(30) = null, @id int)
as
	update paciente set primer_nombre=@primer_nombre, segundo_nombre = @segundo_nombre,
	primer_apellido = @primer_apellido, segundo_apellido = @segundo_apellido, 
	telefono = @telefono, email = @email where id_paciente = @id


create procedure crear_cita(@tratamiento nvarchar(50), @fecha datetime,@paciente int)
as
	insert into cita(id_paciente, tratamiento, fecha) values(@paciente, @tratamiento, @fecha)


create procedure eliminar_cita(@id_cita int)
as
	delete from cita where id_cita = @id_cita

create procedure modificar_cita(@tratamiento nvarchar(50), @fecha datetime, @id int)
as
	update cita set tratamiento = @tratamiento, fecha = @fecha
	where id_cita = @id

create procedure obtener_citas_futuras(@id_paciente int)
as
	select id_cita from cita where fecha > getdate()and id_paciente = @id_paciente order by fecha asc

create procedure obtener_citas_pasadas(@id_paciente int)
as
	select id_cita from cita where fecha < getdate() and id_paciente = @id_paciente order by fecha desc	


create procedure cargar_pacientes
as 
	select id_paciente from paciente

create procedure seleccionar_paciente(@id int)
as
	select primer_nombre, segundo_nombre, primer_apellido, segundo_apellido,
	telefono, email, ocupacion from paciente where id_paciente = @id

create procedure cargar_ultima_cita(@id_paciente int)
as
	select id_cita , max(fecha) from cita where id_paciente = @id_paciente and
	fecha < getdate() group by id_cita

create procedure obtener_usuarios
as 
	select username, password from usuarios

create procedure obtener_usuario(@username nvarchar(20))
as
	select username, password, fecha_registro, fecha_session, usertype, primer_nombre, primer_apellido,
	segundo_nombre, segundo_apellido, email
	from usuarios
	where username = @username

create procedure eliminar_usuario(@username nvarchar(20))
as
	delete from usuarios where username = @username



